#include <iostream>
using namespace std;

int add(int a, int b) {
  cout << "Call add()" << endl;
  return a + b;
}

int main() {
  // 不会实际调用 add()
  decltype(add(1, 2)) c = 0;

  // 不会去掉变量本身的  const 和 reference(&)
  const int ci = 0, &cj = ci;
  decltype(ci) x = 0; // x has type const int
  // x = 10;          // Error， x is const 
  decltype(cj) y = x; // y has type const int&
  // y = 10;          // Error, y is const
  // decltype(cj) z;     // Error, z is a reference and must be initialized

  return 0;
}
